package n1742;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {

	
	static int f[]=new int[100001];
	
	static int n,m;
	
	static int A[]=new int[101];
	
	static int C[]=new int[101];
	
	static boolean v[]=new boolean[100001];
	
//	static void zeroOnePack(int weight,int cost)
//	{
//		for(int i=m;i>=cost;i--)
//		{
//			if(f[i]<f[i-cost]+weight)f[i]=f[i-cost]+weight;
//		}
//	}
//	static void completePack(int weight,int cost)
//	{
//		for(int i=cost;i<m+1;i++)
//		{
//			if(f[i]<f[i-cost]+weight)f[i]=f[i-cost]+weight;
//		}
//	}
	
	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception{
		// TODO Auto-generated method stub

		BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
		String line=null;
		while((line=bf.readLine())!=null)
		{
			StringTokenizer st=new StringTokenizer(line);
			n=Integer.parseInt(st.nextToken());
			m=Integer.parseInt(st.nextToken());
			if(n==0&&m==0)break;
			//for(int i=0;i<m+1;i++)f[i]=0;
			st=new StringTokenizer(bf.readLine());
			for(int i=0;i<n;i++)
			{
				A[i]=Integer.parseInt(st.nextToken());
			}
			for(int i=0;i<n;i++)
			{
//				int p=Integer.parseInt(st.nextToken());
//				for(int k=1;k<p;k*=2)
//				{
//					zeroOnePack(A[i]*k, A[i]*k);
//					p-=k;
//				}
//				if(p>0)zeroOnePack(A[i]*p, A[i]*p);
				C[i]=Integer.parseInt(st.nextToken());
			}
			
			v[0]=true;
			for(int i=1;i<m+1;i++) {
				v[i]=false;
			}
			
			for(int i=0;i<n;i++)
			{
				for(int j=0;j<m+1;j++) {
					f[j]=0;
				}
				for(int j=A[i];j<=m;j++)
				{
					if(!v[j]&&v[j-A[i]]&&f[j-A[i]]<C[i])
					{
						v[j]=true;
						f[j]=f[j-A[i]]+1;
					}
				}
			}
			
			
			int count=0;
//			for(int i=1;i<m+1;i++)if(f[i]==i)count++;
			for(int i=1;i<m+1;i++)if(v[i])count++;
			System.out.println(count);
		}
	}

}
